/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.model.filter;

import br.com.sigodonto.model.entity.Dentista;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Fidelis
 */
public class FiltroPhaseListener implements PhaseListener {

    @Override
    public void afterPhase(PhaseEvent event) {
        // Obtém o contexto atual
        FacesContext contexto = event.getFacesContext();
        // Obtém a página que atualmente está interagindo com o ciclo
        String paginaAtual = contexto.getViewRoot().getViewId();
        // Se for a página 'login.jsp' seta a variável como true
        boolean isLoginPage = paginaAtual.lastIndexOf("index.xhtml") > -1;
        // Obtém a sessão atual
        HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
        // Restaga o nome do usuário logado


        if (sessao != null) {

            Dentista usuario = (Dentista) sessao.getAttribute("usuario");

            // Verifica se o usuário está logado e se não está na página de login
            if (!isLoginPage && usuario == null) {
                // Redireciona o fluxo para a página de login
                NavigationHandler nh = contexto.getApplication().getNavigationHandler();
                nh.handleNavigation(contexto, null, "sair");
            } else if (isLoginPage && usuario != null) {
                if (usuario.getContaUsuario().getTipo().equals("AD")) {
                    // Se o usuário logado tentar acessar a página de login ele é
                    // redirecionado para a página inicial
                    NavigationHandler nh = contexto.getApplication().getNavigationHandler();
                    nh.handleNavigation(contexto, null, "sucessoad");
                } else {
                    // Se o usuário logado tentar acessar a página de login ele é
                    // redirecionado para a página inicial
                    NavigationHandler nh = contexto.getApplication().getNavigationHandler();
                    nh.handleNavigation(contexto, null, "sucessode");
                }

            }
        }
    }

    @Override
    public void beforePhase(PhaseEvent event) {
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
}
